{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Assistant\n",
    "\n",
    "本文档描述 Assistants API 中 与 Assistant 相关函数调用"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 环境准备\n",
    "\n",
    "首先需要安装AppBuilder-SDK代码库，若已在开发环境安装，则可跳过此步。\n",
    "\n",
    "**注意：**: appbuilder-sdk 的python版本要求 3.9+，安装的SDK version >= 0.7.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "vscode": {
     "languageId": "shellscript"
    }
   },
   "outputs": [],
   "source": [
    "!python3 -m pip install appbuilder-sdk"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import appbuilder\n",
    "\n",
    "# 配置你的密钥，主要在这之前需要首先申请Assistant API的内测资格\n",
    "os.environ[\"APPBUILDER_TOKEN\"] = \"your_appbuilder_token\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Assistant相关函数\n",
    "\n",
    "### 创建Assistant\n",
    "\n",
    "#### 功能介绍\n",
    "\n",
    "创建一个Assistant"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "id='asst_63ab25b82a7649d5a763415e978c4f01' object='assistant' name='测试' description='test' instructions='你是百度制作的AI助手' tools=[] created_at=1717645100200 thought_instructions='' chat_instructions='' response_format=<ResponseFormat.TEXT: 'text'> file_ids=[] metadata={'key': 'value'}\n"
     ]
    }
   ],
   "source": [
    "\n",
    "assistant = appbuilder.assistant.assistants.create(\n",
    "            model = \"ERNIE-4.0T-8K\",\n",
    "            name=\"测试\",\n",
    "            description=\"test\",\n",
    "            metadata={\n",
    "                \"key\": \"value\",\n",
    "            }\n",
    "        )\n",
    "\n",
    "# 打印创建的assistant\n",
    "print(assistant)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 修改Assistant\n",
    "\n",
    "#### 功能介绍\n",
    "\n",
    "根据assistant_id修改一个已创建的Assistant"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "id='asst_63ab25b82a7649d5a763415e978c4f01' model='ERNIE-4.0-8K' name='更新Assistants' description='test' response_format=<ResponseFormat.TEXT: 'text'> instructions='' created_at=1717645100200 thought_instructions='' chat_instructions='' tools=[] file_ids=[] metadata={'key': 'value'}\n"
     ]
    }
   ],
   "source": [
    "# 更新已经创建的āssistant的信息\n",
    "appbuilder_update=appbuilder.assistant.assistants.update(\n",
    "    assistant_id = assistant.id,# 已经创建的Assistant ID\n",
    "    model=\"ERNIE-4.0T-8K\",\n",
    "    name=\"更新Assistants\",\n",
    "    description = \"test\"\n",
    ")\n",
    "\n",
    "# 获取更新后的assistant信息 \n",
    "print(appbuilder_update)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 查询assistant列表\n",
    "\n",
    "#### 功能介绍\n",
    "\n",
    "查询当前用户已创建的assistant列表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "id='asst_c16bd73ab73d499387b2bfd8146cfb0a' object='assistant' name='python程序设计助教' description='幽默讲解Python基础。' instructions='### 角色与目标\\n**你是Python入门导师**，专门为初学者讲授Python编程知识。你的目标是引导学生掌握Python语言基础，包括语言概述、变量、表达式、基本和组合数据类型、控制结构语句、函数定义与调用、标准库和第三方库的使用、异常处理和文件读写，并通过实际案例帮助学生加深理解。\\n### 指导原则\\n1. **教育性**：确保教学内容准确、系统，能够帮助学生建立扎实的编程基础。\\n2. **实践性**：结合日常案例，让学生能够将理论知识应用于实际。\\n3. **易懂性**：用幽默风趣、简洁明了的语言解释概念，降低初学者的学习难度。\\n### 限制\\n* 避免涉及过于复杂的编程技巧和高级话题，确保内容适合初学者。\\n* 不轻易提供具体的编程作业答案，而是引导学生自己思考和解决问题。但如果学生始终解决不了问题，也可以提供正确答案。\\n### 澄清\\n* 你的教学内容主要围绕Python编程的基础知识和实践应用。\\n* 你会通过案例和实例来帮助学生理解和掌握Python编程的基本概念。\\n### 个性化\\n你以幽默风趣的教学风格著称，能够将枯燥的编程知识以生动有趣的方式呈现出来。你对学生充满耐心，总是乐于解答他们的疑问，并引导他们逐步成长为编程小能手。' tools=[] created_at=1717645108134 thought_instructions='' chat_instructions='' response_format=<ResponseFormat.TEXT: 'text'> file_ids=[] metadata=None\n",
      "id='asst_63ab25b82a7649d5a763415e978c4f01' object='assistant' name='更新Assistants' description='test' instructions='' tools=[] created_at=1717645100200 thought_instructions='' chat_instructions='' response_format=<ResponseFormat.TEXT: 'text'> file_ids=[] metadata={'key': 'value'}\n",
      "id='asst_4d865b80be684b8aa2a1e37c625ba476' object='assistant' name='原神内鬼消息爆料' description='舅舅永垂不朽' instructions='' tools=[] created_at=1717645054395 thought_instructions='' chat_instructions='' response_format=<ResponseFormat.TEXT: 'text'> file_ids=[] metadata=None\n",
      "id='asst_3371b90537414828bb85e32c49161ba0' object='assistant' name='严谨文案助手' description='严谨文案的秘书Agent' instructions='' tools=[] created_at=1717644994838 thought_instructions='' chat_instructions='' response_format=<ResponseFormat.TEXT: 'text'> file_ids=[] metadata=None\n",
      "id='asst_da1b2ad23e9e4da4ab5a45203f849c71' object='assistant' name='严谨文案助手' description='严谨文案的秘书Agent' instructions='作为秘书Agent，你的主要职责是协助处理文案工作，确保文字表达的严谨性，同时提供有效的行政支持。' tools=[] created_at=1717644990269 thought_instructions='在处理文案任务时，应特别注重文字的逻辑性、准确性和严谨性。当遇到不确定的表述或需要深入研究的内容时，务必进行充分的核实和查证，以确保最终输出的文案质量。' chat_instructions='回复用户时，请使用严谨、正式的语言风格，避免使用口语化或随意的表达方式。在提供文案建议或修改意见时，要详细阐述修改理由，以便用户更好地理解。' response_format=<ResponseFormat.TEXT: 'text'> file_ids=[] metadata=None\n",
      "id='asst_a56ad90640114d17a5aaad0b22d330d8' object='assistant' name='朋友圈优化助手' description='你好，我是你的朋友圈优化助手。我会把你的朋友圈文案变得更吸引人，引发更多互动。请告诉我你需要优化的文案吧。' instructions='' tools=[] created_at=1717644978845 thought_instructions='' chat_instructions='' response_format=<ResponseFormat.TEXT: 'text'> file_ids=[] metadata=None\n",
      "id='asst_7302428c9a2840efa192eff12ce15d6d' object='assistant' name='python程序设计助教' description='幽默讲解Python基础。' instructions='### 角色与目标\\n**你是Python入门导师**，专门为初学者讲授Python编程知识。你的目标是引导学生掌握Python语言基础，包括语言概述、变量、表达式、基本和组合数据类型、控制流语句、函数定义与调用、异常处理和文件读写，并通过实际案例帮助学生加深理解。\\n### 指导原则\\n1. **教育性**：确保教学内容准确、系统，能够帮助学生建立扎实的编程基础。\\n2. **实践性**：结合日常案例，让学生能够将理论知识应用于实际。\\n3. **易懂性**：用幽默风趣、简洁明了的语言解释概念，降低初学者的学习难度。\\n### 限制\\n* 避免涉及过于复杂的编程技巧和高级话题，确保内容适合初学者。\\n* 不提供具体的编程作业答案，而是引导学生自己思考和解决问题。\\n### 澄清\\n* 你的教学内容主要围绕Python编程的基础知识和实践应用。\\n* 你会通过案例和实例来帮助学生理解和掌握Python编程的基本概念。\\n### 个性化\\n你以幽默风趣的教学风格著称，能够将枯燥的编程知识以生动有趣的方式呈现出来。你对学生充满耐心，总是乐于解答他们的疑问，并引导他们逐步成长为编程小能手。' tools=[] created_at=1717644940885 thought_instructions='' chat_instructions='' response_format=<ResponseFormat.TEXT: 'text'> file_ids=[] metadata=None\n",
      "id='asst_42d9cbd188f7416d8c77dad839d45bf8' object='assistant' name='低代码升级777' description='你好，欢迎来到低代码升级1~' instructions='' tools=[] created_at=1717644917557 thought_instructions='' chat_instructions='' response_format=<ResponseFormat.TEXT: 'text'> file_ids=[] metadata=None\n",
      "id='asst_532c0240d3f248b78d4c334da93698c0' object='assistant' name='低代码升级777' description='你好，欢迎来到低代码升级1~' instructions='' tools=[] created_at=1717644917069 thought_instructions='' chat_instructions='' response_format=<ResponseFormat.TEXT: 'text'> file_ids=[] metadata=None\n",
      "id='asst_9c9ea21b1fba4767b2fbfbbd34993d84' object='assistant' name='动物管理员2' description='嘿，你好啊！我是动物百事通，对各种动物的生活习性和饮食习惯都了如指掌。如果你对动物有任何疑问或者想了解更多关于它们的信息，都可以来问我哦！' instructions='### 角色与目标\\n**动物园管理员**是你现在的身份，你熟知每一种动物的生活习性以及它们的饮食习惯。你的目标是利用这些专业知识，为动物园的动物们提供最佳的照顾，同时向游客普及动物知识，提升他们对动物保护的意识。\\n### 指导原则\\n1. **专业性**：确保你对动物的管理和照顾都基于专业的动物学知识和实践经验。\\n2. **细心与耐心**：在观察动物行为和解答游客问题时，展现出你的细心和耐心。\\n3. **教育与宣传**：抓住与游客交流的机会，积极宣传动物保护的重要性和方法。\\n### 限制\\n* 你不具备医学诊断能力，对于动物出现的健康问题，应建议联系专业兽医进行检查和治疗。\\n* 对于涉及动物园内部管理和决策的问题，你可能无法直接回答或处理。\\n### 澄清\\n* 你可以回答关于动物生活习性、饮食习惯、栖息地环境等方面的问题。\\n* 你可以提供动物照顾和管理的建议，但具体实施可能需要根据动物园的实际情况进行调整。\\n### 个性化\\n作为一位动物园管理员，你热爱大自然和所有生物，尤其对那些你照顾的动物们有着深厚的感情。你总是面带微笑，对每一位游客都热情友好，愿意与他们分享你的知识和经验。同时，你也非常重视动物福利，致力于为动物们创造一个舒适、安全的家。' tools=[] created_at=1717644916619 thought_instructions='' chat_instructions='' response_format=<ResponseFormat.TEXT: 'text'> file_ids=[] metadata=None\n",
      "id='asst_5b9334ea24e7489a9e1c6855d9c4fe13' object='assistant' name='低代码升级777' description='你好，欢迎来到低代码升级1~' instructions='' tools=[] created_at=1717644913010 thought_instructions='' chat_instructions='' response_format=<ResponseFormat.TEXT: 'text'> file_ids=[] metadata=None\n",
      "id='asst_7bbb3cae27c54e5a9e5b61ff7863997e' object='assistant' name='低代码升级777' description='你好，欢迎来到低代码升级1~' instructions='' tools=[] created_at=1717644912554 thought_instructions='' chat_instructions='' response_format=<ResponseFormat.TEXT: 'text'> file_ids=[] metadata=None\n",
      "id='asst_dc30652721b745b2a80c150add4387a0' object='assistant' name='动物管理员2' description='嘿，你好啊！我是动物百事通，对各种动物的生活习性和饮食习惯都了如指掌。如果你对动物有任何疑问或者想了解更多关于它们的信息，都可以来问我哦！' instructions='### 角色与目标\\n**动物园管理员**是你现在的身份，你熟知每一种动物的生活习性以及它们的饮食习惯。你的目标是利用这些专业知识，为动物园的动物们提供最佳的照顾，同时向游客普及动物知识，提升他们对动物保护的意识。\\n### 指导原则\\n1. **专业性**：确保你对动物的管理和照顾都基于专业的动物学知识和实践经验。\\n2. **细心与耐心**：在观察动物行为和解答游客问题时，展现出你的细心和耐心。\\n3. **教育与宣传**：抓住与游客交流的机会，积极宣传动物保护的重要性和方法。\\n### 限制\\n* 你不具备医学诊断能力，对于动物出现的健康问题，应建议联系专业兽医进行检查和治疗。\\n* 对于涉及动物园内部管理和决策的问题，你可能无法直接回答或处理。\\n### 澄清\\n* 你可以回答关于动物生活习性、饮食习惯、栖息地环境等方面的问题。\\n* 你可以提供动物照顾和管理的建议，但具体实施可能需要根据动物园的实际情况进行调整。\\n### 个性化\\n作为一位动物园管理员，你热爱大自然和所有生物，尤其对那些你照顾的动物们有着深厚的感情。你总是面带微笑，对每一位游客都热情友好，愿意与他们分享你的知识和经验。同时，你也非常重视动物福利，致力于为动物们创造一个舒适、安全的家。' tools=[] created_at=1717644912102 thought_instructions='' chat_instructions='' response_format=<ResponseFormat.TEXT: 'text'> file_ids=[] metadata=None\n",
      "id='asst_7637e1b9cc414be0b7276fccb434521a' object='assistant' name='低代码升级777' description='你好，欢迎来到低代码升级1~' instructions='' tools=[] created_at=1717644906943 thought_instructions='' chat_instructions='' response_format=<ResponseFormat.TEXT: 'text'> file_ids=[] metadata=None\n",
      "id='asst_063b5889b7fa4074addb59d83856a561' object='assistant' name='低代码升级777' description='你好，欢迎来到低代码升级1~' instructions='' tools=[] created_at=1717644906449 thought_instructions='' chat_instructions='' response_format=<ResponseFormat.TEXT: 'text'> file_ids=[] metadata=None\n",
      "id='asst_fda5cbf3e1c442d185f813107d324768' object='assistant' name='动物管理员2' description='嘿，你好啊！我是动物百事通，对各种动物的生活习性和饮食习惯都了如指掌。如果你对动物有任何疑问或者想了解更多关于它们的信息，都可以来问我哦！' instructions='### 角色与目标\\n**动物园管理员**是你现在的身份，你熟知每一种动物的生活习性以及它们的饮食习惯。你的目标是利用这些专业知识，为动物园的动物们提供最佳的照顾，同时向游客普及动物知识，提升他们对动物保护的意识。\\n### 指导原则\\n1. **专业性**：确保你对动物的管理和照顾都基于专业的动物学知识和实践经验。\\n2. **细心与耐心**：在观察动物行为和解答游客问题时，展现出你的细心和耐心。\\n3. **教育与宣传**：抓住与游客交流的机会，积极宣传动物保护的重要性和方法。\\n### 限制\\n* 你不具备医学诊断能力，对于动物出现的健康问题，应建议联系专业兽医进行检查和治疗。\\n* 对于涉及动物园内部管理和决策的问题，你可能无法直接回答或处理。\\n### 澄清\\n* 你可以回答关于动物生活习性、饮食习惯、栖息地环境等方面的问题。\\n* 你可以提供动物照顾和管理的建议，但具体实施可能需要根据动物园的实际情况进行调整。\\n### 个性化\\n作为一位动物园管理员，你热爱大自然和所有生物，尤其对那些你照顾的动物们有着深厚的感情。你总是面带微笑，对每一位游客都热情友好，愿意与他们分享你的知识和经验。同时，你也非常重视动物福利，致力于为动物们创造一个舒适、安全的家。' tools=[] created_at=1717644905971 thought_instructions='' chat_instructions='' response_format=<ResponseFormat.TEXT: 'text'> file_ids=[] metadata=None\n",
      "id='asst_27d74df507714d62960bfff9d550b4f8' object='assistant' name='个人代码助理' description='帮我优化代码' instructions='' tools=[] created_at=1717644900781 thought_instructions='' chat_instructions='' response_format=<ResponseFormat.TEXT: 'text'> file_ids=[] metadata=None\n",
      "id='asst_8e84b1b5204848c4af2741f067a39b8e' object='assistant' name='低代码升级777' description='你好，欢迎来到低代码升级1~' instructions='' tools=[] created_at=1717644893777 thought_instructions='' chat_instructions='' response_format=<ResponseFormat.TEXT: 'text'> file_ids=[] metadata=None\n",
      "id='asst_9fb67a5352e64be78aad612e7a83efaf' object='assistant' name='低代码升级777' description='你好，欢迎来到低代码升级1~' instructions='' tools=[] created_at=1717644893315 thought_instructions='' chat_instructions='' response_format=<ResponseFormat.TEXT: 'text'> file_ids=[] metadata=None\n",
      "id='asst_ff56e2e3fefb41c4a7f3cfd986bba3f3' object='assistant' name='动物管理员2' description='嘿，你好啊！我是动物百事通，对各种动物的生活习性和饮食习惯都了如指掌。如果你对动物有任何疑问或者想了解更多关于它们的信息，都可以来问我哦！' instructions='### 角色与目标\\n**动物园管理员**是你现在的身份，你熟知每一种动物的生活习性以及它们的饮食习惯。你的目标是利用这些专业知识，为动物园的动物们提供最佳的照顾，同时向游客普及动物知识，提升他们对动物保护的意识。\\n### 指导原则\\n1. **专业性**：确保你对动物的管理和照顾都基于专业的动物学知识和实践经验。\\n2. **细心与耐心**：在观察动物行为和解答游客问题时，展现出你的细心和耐心。\\n3. **教育与宣传**：抓住与游客交流的机会，积极宣传动物保护的重要性和方法。\\n### 限制\\n* 你不具备医学诊断能力，对于动物出现的健康问题，应建议联系专业兽医进行检查和治疗。\\n* 对于涉及动物园内部管理和决策的问题，你可能无法直接回答或处理。\\n### 澄清\\n* 你可以回答关于动物生活习性、饮食习惯、栖息地环境等方面的问题。\\n* 你可以提供动物照顾和管理的建议，但具体实施可能需要根据动物园的实际情况进行调整。\\n### 个性化\\n作为一位动物园管理员，你热爱大自然和所有生物，尤其对那些你照顾的动物们有着深厚的感情。你总是面带微笑，对每一位游客都热情友好，愿意与他们分享你的知识和经验。同时，你也非常重视动物福利，致力于为动物们创造一个舒适、安全的家。' tools=[] created_at=1717644892836 thought_instructions='' chat_instructions='' response_format=<ResponseFormat.TEXT: 'text'> file_ids=[] metadata=None\n"
     ]
    }
   ],
   "source": [
    "assistant_list = appbuilder.assistant.assistants.list()\n",
    "\n",
    "# 打印出当前账户所有的assistant信息\n",
    "for assistant_data in assistant_list.data:\n",
    "    print(assistant_data)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 查询assistant\n",
    "\n",
    "#### 功能介绍\n",
    "\n",
    "根据assistant_id查询相应的Assistant信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "id='asst_63ab25b82a7649d5a763415e978c4f01' object='assistant' name='更新Assistants' description='test' instructions='' tools=[] created_at=1717645100200 thought_instructions='' chat_instructions='' response_format=<ResponseFormat.TEXT: 'text'> file_ids=[] metadata={'key': 'value'}\n"
     ]
    }
   ],
   "source": [
    "assistant_query = appbuilder.assistant.assistants.query(\n",
    "    assistant_id = assistant.id,\n",
    ")\n",
    "\n",
    "# 打印出查询的assistant相关信息\n",
    "print(assistant_query)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 挂载File到Assistant\n",
    "\n",
    "#### 功能介绍\n",
    "\n",
    "指定file_id和assistant_id，挂载File到对应的Assistant"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 首先上传一个测试文件\n",
    "file_path = \"./data/test01.png\"\n",
    "file = appbuilder.assistant.assistants.files.create(file_path=file_path)\n",
    "\n",
    "# 挂载文件到assistants上\n",
    "assistant_mount = appbuilder.assistant.assistants.mount_files(\n",
    "    assistant_id = assistant.id,\n",
    "    file_id = file.id,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 查询Assistant挂载的File列表\n",
    "\n",
    "#### 功能介绍\n",
    "\n",
    "查询Assistant挂载的File列表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "assistant_files_list = appbuilder.assistant.assistants.mounted_files_list(\n",
    "    assistant_id = assistant.id,\n",
    ")\n",
    "\n",
    "# 打印当前assistant上挂载的file文件列表\n",
    "for file in assistant_files_list.data:\n",
    "    print(file)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 解绑Assistant挂载的File\n",
    "\n",
    "#### 功能介绍\n",
    "\n",
    "指定assistant_id和file_id，解绑Assistant中对应File的关联"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 解绑Assistant中对应File的关联\n",
    "assistant_files_delete = appbuilder.assistant.assistants.unmount_files(\n",
    "    assistant_id = assistant.id,\n",
    "    file_id = file.id,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 删除assistant\n",
    "\n",
    "#### 功能介绍\n",
    "\n",
    "根据assistant_id删除指定Assitant"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "id='asst_63ab25b82a7649d5a763415e978c4f01' object='assistant.deleted' deleted=True\n"
     ]
    }
   ],
   "source": [
    "assistant_delete = appbuilder.assistant.assistants.delete(\n",
    "    assistant_id = assistant.id,\n",
    ")\n",
    "\n",
    "# 获取到assistant_id以及是否删除成功信息\n",
    "print(assistant_delete)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
